package com.hejing.类的成员之五_内部类;

/**
 * ClassName: OuterClassTest
 * Package: com.hejing.类的成员之五_内部类
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-04-01 19:38
 * @Version: 1.0
 */
public class OuterClassTest {
    public static void main(String[] args) {

        // 1、创建Person的静态成员内部类的实例:
        Person.Dog dog = new Person.Dog();
        dog.eat();

        // 2、创建Person的非静态成员内部类的实例:
        // Person.Bird bird = new Person.Bird();  // 报错，此类为非静态类，依赖于对象的创建。
        Person p1 = new Person();
        Person.Bird bird = p1.new Bird();
        bird.eat();
        bird.show();
    }
}



class Person{  // 外部类

    // 属性:
    String name = "Tom";
    int age;

    // 静态成员内部类:
    static class Dog{
        public void eat() {
            System.out.println("狗狗吃骨头");
        }
    }

    // 非静态成员内部类
    class Bird{
        String name = "啄木鸟";
        public void eat() {
            System.out.println("鸟吃虫子");
        }

        public void show(){
            System.out.println("age = " + age);
            System.out.println("name = " + name);
            System.out.println("name = " + this.name);  // 调用内部类中的name
            System.out.println("name = " + Person.this.name);  // 调用外部类中的name
        }
    }

    public void method() {

        // 方法内的局部内部类:
        class InnerClass01{

        }
    }

    public Person(){
        // 构造器内的局部内部类:
        class InnerClass01{

        }
    }

    {
        // 代码块内的局部内部类。
        class InnerClass02{

        }
    }
}
























